/**
 * Settle模块类型定义
 * @description 商户结算管理模块的所有TypeScript类型定义
 * @author AI Assistant
 * @since 1.0.0
 */

/**
 * 分页参数
 */
export interface PageParam {
  pageNo: number // 页码
  pageSize: number // 每页数量
}

/**
 * 分页结果
 */
export interface PageResult<T> {
  list: T[] // 数据列表
  total: number // 总数
}

// ==================== 商户管理类型 ====================

/**
 * 商户信息VO
 */
export interface MerchantVO {
  id: number // 商户ID
  merchantNo: string // 商户编号
  merchantName: string // 商户名称
  merchantType: number // 商户类型: 0-企业 1-个体 2-小微
  channelType: number // 渠道类型: 1-汇付天下 2-银联商务
  status: number // 状态: 0-待审核 1-审核通过 2-审核拒绝 3-已冻结
  contactName: string // 联系人姓名
  contactPhone: string // 联系人电话
  contactEmail?: string // 联系人邮箱
  settleCycle: number // 结算周期: 0-每日 1-每周 2-每月
  settleAccount: string // 结算账号
  createTime: string // 创建时间
  updateTime?: string // 更新时间
}

/**
 * 商户创建请求VO
 */
export interface MerchantCreateReqVO {
  merchantName: string // 商户名称(必填)
  merchantType: number // 商户类型(必填)
  channelType: number // 渠道类型(必填)
  contactName: string // 联系人姓名(必填)
  contactPhone: string // 联系人电话(必填)
  contactEmail?: string // 联系人邮箱
  settleCycle: number // 结算周期(必填)
  settleAccount: string // 结算账号(必填)
  remark?: string // 备注
}

/**
 * 商户更新请求VO
 */
export interface MerchantUpdateReqVO extends MerchantCreateReqVO {
  id: number // 商户ID(必填)
}

/**
 * 商户分页查询请求VO
 */
export interface MerchantPageReqVO extends PageParam {
  merchantNo?: string // 商户编号
  merchantName?: string // 商户名称
  merchantType?: number // 商户类型
  channelType?: number // 渠道类型
  status?: number // 状态
  createTime?: [string, string] // 创建时间范围
}

// ==================== 分账管理类型 ====================

/**
 * 分账规则VO
 */
export interface SplitRuleVO {
  id: number // 规则ID
  ruleNo: string // 规则编号
  merchantNo: string // 商户编号
  splitRuleType: number // 规则类型: 0-固定比例 1-固定金额
  splitRatio?: number // 分账比例(0-100)
  splitAmount?: number // 分账金额(元)
  ruleStatus: number // 规则状态: 0-禁用 1-启用
  createTime: string // 创建时间
}

/**
 * 分账规则创建请求VO
 */
export interface SplitRuleCreateReqVO {
  merchantNo: string // 商户编号(必填)
  splitRuleType: number // 规则类型(必填)
  splitRatio?: number // 分账比例(规则类型为0时必填)
  splitAmount?: number // 分账金额(规则类型为1时必填)
  remark?: string // 备注
}

/**
 * 分账规则更新请求VO
 */
export interface SplitRuleUpdateReqVO extends SplitRuleCreateReqVO {
  id: number // 规则ID(必填)
}

/**
 * 分账规则分页查询请求VO
 */
export interface SplitRulePageReqVO extends PageParam {
  merchantNo?: string // 商户编号
  splitRuleType?: number // 规则类型
  ruleStatus?: number // 规则状态
}

/**
 * 分账记录VO
 */
export interface SplitRecordVO {
  id: number // 记录ID
  orderNo: string // 订单号
  merchantNo: string // 商户编号
  splitAmount: number // 分账金额(元)
  splitStatus: number // 分账状态: 0-待分账 1-分账成功 2-分账失败
  splitTime?: string // 分账时间
  createTime: string // 创建时间
}

// ==================== 结算管理类型 ====================

/**
 * 结算单VO
 */
export interface SettleOrderVO {
  id: number // 结算单ID
  settleNo: string // 结算单号
  merchantNo: string // 商户编号
  settleCycle: number // 结算周期: 0-每日 1-每周 2-每月
  settleAmount: number // 结算金额(元)
  settleStatus: number // 结算状态: 0-待结算 1-已结算 2-结算失败
  settleTime?: string // 结算时间
  createTime: string // 创建时间
}

/**
 * 结算单分页查询请求VO
 */
export interface SettleOrderPageReqVO extends PageParam {
  settleNo?: string // 结算单号
  merchantNo?: string // 商户编号
  settleCycle?: number // 结算周期
  settleStatus?: number // 结算状态
  createTime?: [string, string] // 创建时间范围
}

// ==================== 子商户管理类型 ====================

/**
 * 子商户VO
 */
export interface SubMerchantVO {
  id: number // 子商户ID
  subMerchantNo: string // 子商户编号
  merchantNo: string // 主商户编号
  subMerchantName: string // 子商户名称
  subMerchantType: number // 子商户类型: 0-个人 1-企业
  status: number // 状态: 0-待审核 1-审核通过 2-审核拒绝
  contactName: string // 联系人姓名
  contactPhone: string // 联系人电话
  createTime: string // 创建时间
}

/**
 * 子商户创建请求VO
 */
export interface SubMerchantCreateReqVO {
  merchantNo: string // 主商户编号(必填)
  subMerchantName: string // 子商户名称(必填)
  subMerchantType: number // 子商户类型(必填)
  contactName: string // 联系人姓名(必填)
  contactPhone: string // 联系人电话(必填)
  remark?: string // 备注
}

/**
 * 子商户分页查询请求VO
 */
export interface SubMerchantPageReqVO extends PageParam {
  merchantNo?: string // 主商户编号
  subMerchantNo?: string // 子商户编号
  subMerchantName?: string // 子商户名称
  status?: number // 状态
}

// ==================== 支付管理类型 ====================

/**
 * 支付订单VO
 */
export interface PaymentOrderVO {
  id: number // 订单ID
  orderNo: string // 订单号
  merchantNo: string // 商户编号
  amount: number // 订单金额(元)
  paymentMethod: number // 支付方式: 1-微信 2-支付宝 3-银联 4-数字人民币
  channelType: number // 渠道类型: 1-汇付天下 2-银联商务
  status: number // 订单状态: 0-待支付 1-支付成功 2-支付失败 3-已关闭 4-已退款
  payTime?: string // 支付时间
  createTime: string // 创建时间
}

/**
 * 支付订单分页查询请求VO
 */
export interface PaymentOrderPageReqVO extends PageParam {
  orderNo?: string // 订单号
  merchantNo?: string // 商户编号
  paymentMethod?: number // 支付方式
  status?: number // 订单状态
  createTime?: [string, string] // 创建时间范围
}

/**
 * 退款记录VO
 */
export interface PaymentRefundVO {
  id: number // 退款ID
  refundNo: string // 退款单号
  originalOrderNo: string // 原订单号
  merchantNo: string // 商户编号
  refundAmount: number // 退款金额(元)
  refundStatus: string // 退款状态: P-处理中 S-成功 F-失败
  refundCompleteTime?: string // 退款完成时间
  createTime: string // 创建时间
}

// ==================== 余额管理类型 ====================

/**
 * 商户余额VO
 */
export interface MerchantBalanceVO {
  id: number // 余额ID
  merchantNo: string // 商户编号
  availableBalance: number // 可用余额(元)
  frozenBalance: number // 冻结余额(元)
  totalBalance: number // 总余额(元)
  updateTime: string // 更新时间
}

/**
 * 余额变动记录VO
 */
export interface BalanceChangeVO {
  id: number // 记录ID
  merchantNo: string // 商户编号
  changeType: number // 变动类型: 1-收入 2-支出 3-冻结 4-解冻
  changeAmount: number // 变动金额(元)
  beforeBalance: number // 变动前余额(元)
  afterBalance: number // 变动后余额(元)
  remark?: string // 备注
  createTime: string // 创建时间
}

// ==================== 枚举类型定义 ====================

/**
 * 商户类型枚举
 */
export enum MerchantTypeEnum {
  ENTERPRISE = 0, // 企业商户
  INDIVIDUAL = 1, // 个体商户
  MICRO = 2 // 小微商户
}

/**
 * 商户状态枚举
 */
export enum MerchantStatusEnum {
  PENDING = 0, // 待审核
  APPROVED = 1, // 审核通过
  REJECTED = 2, // 审核拒绝
  FROZEN = 3 // 已冻结
}

/**
 * 渠道类型枚举
 */
export enum ChannelTypeEnum {
  HUIFU = 1, // 汇付天下
  UNIONPAY = 2 // 银联商务
}

/**
 * 结算周期枚举
 */
export enum SettleCycleEnum {
  DAILY = 0, // 每日
  WEEKLY = 1, // 每周
  MONTHLY = 2 // 每月
}

/**
 * 分账规则类型枚举
 */
export enum SplitRuleTypeEnum {
  RATIO = 0, // 固定比例
  AMOUNT = 1 // 固定金额
}

/**
 * 分账状态枚举
 */
export enum SplitStatusEnum {
  PENDING = 0, // 待分账
  SUCCESS = 1, // 分账成功
  FAILED = 2 // 分账失败
}

/**
 * 支付方式枚举
 */
export enum PaymentMethodEnum {
  WECHAT = 1, // 微信支付
  ALIPAY = 2, // 支付宝
  UNIONPAY = 3, // 银联支付
  DIGITAL_RMB = 4 // 数字人民币
}

/**
 * 支付状态枚举
 */
export enum PaymentStatusEnum {
  PENDING = 0, // 待支付
  SUCCESS = 1, // 支付成功
  FAILED = 2, // 支付失败
  CLOSED = 3, // 已关闭
  REFUNDED = 4 // 已退款
}

/**
 * 结算状态枚举
 */
export enum SettleStatusEnum {
  PENDING = 0, // 待结算
  SETTLED = 1, // 已结算
  FAILED = 2 // 结算失败
}

/**
 * 余额变动类型枚举
 */
export enum BalanceChangeTypeEnum {
  INCOME = 1, // 收入
  EXPENSE = 2, // 支出
  FREEZE = 3, // 冻结
  UNFREEZE = 4 // 解冻
}

// ==================== 对账管理类型 ====================

/**
 * 对账文件VO
 */
export interface ReconciliationFileVO {
  id: number // 文件ID
  fileName: string // 文件名称
  fileUrl: string // 文件URL
  fileSize: number // 文件大小(字节)
  reconcileDate: string // 对账日期
  channelType: number // 渠道类型: 1-汇付天下 2-银联商务
  status: number // 状态: 0-待处理 1-处理中 2-处理完成 3-处理失败
  totalCount: number // 总笔数
  totalAmount: number // 总金额(元)
  successCount: number // 成功笔数
  failCount: number // 失败笔数
  createTime: string // 创建时间
}

/**
 * 对账文件分页查询请求VO
 */
export interface ReconciliationFilePageReqVO extends PageParam {
  fileName?: string // 文件名称
  channelType?: number // 渠道类型
  status?: number // 状态
  reconcileDate?: [string, string] // 对账日期范围
}

/**
 * 对账差异记录VO
 */
export interface ReconciliationDiffVO {
  id: number // 差异ID
  fileId: number // 文件ID
  orderNo: string // 订单号
  diffType: number // 差异类型: 1-金额不符 2-状态不符 3-多账 4-少账
  ourAmount?: number // 我方金额(元)
  channelAmount?: number // 渠道方金额(元)
  ourStatus?: number // 我方状态
  channelStatus?: number // 渠道方状态
  handleStatus: number // 处理状态: 0-待处理 1-已处理 2-已忽略
  handleRemark?: string // 处理备注
  createTime: string // 创建时间
}

// ==================== 提现管理类型 ====================

/**
 * 提现申请VO
 */
export interface WithdrawApplyVO {
  id: number // 申请ID
  applyNo: string // 申请单号
  merchantNo: string // 商户编号
  withdrawAmount: number // 提现金额(元)
  withdrawFee: number // 提现手续费(元)
  actualAmount: number // 实际到账金额(元)
  bankAccount: string // 银行账号
  bankName: string // 银行名称
  accountName: string // 账户名称
  status: number // 状态: 0-待审核 1-审核通过 2-审核拒绝 3-提现中 4-提现成功 5-提现失败
  auditRemark?: string // 审核备注
  auditTime?: string // 审核时间
  withdrawTime?: string // 提现时间
  createTime: string // 创建时间
}

/**
 * 提现申请创建请求VO
 */
export interface WithdrawApplyCreateReqVO {
  merchantNo: string // 商户编号(必填)
  withdrawAmount: number // 提现金额(必填)
  bankAccount: string // 银行账号(必填)
  bankName: string // 银行名称(必填)
  accountName: string // 账户名称(必填)
  remark?: string // 申请备注
}

/**
 * 提现申请分页查询请求VO
 */
export interface WithdrawApplyPageReqVO extends PageParam {
  applyNo?: string // 申请单号
  merchantNo?: string // 商户编号
  status?: number // 状态
  createTime?: [string, string] // 创建时间范围
}

/**
 * 提现审核请求VO
 */
export interface WithdrawAuditReqVO {
  id: number // 申请ID(必填)
  auditStatus: number // 审核状态: 1-通过 2-拒绝(必填)
  auditRemark?: string // 审核备注
}

// ==================== 其他枚举类型 ====================

/**
 * 对账文件状态枚举
 */
export enum ReconciliationStatusEnum {
  PENDING = 0, // 待处理
  PROCESSING = 1, // 处理中
  COMPLETED = 2, // 处理完成
  FAILED = 3 // 处理失败
}

/**
 * 对账差异类型枚举
 */
export enum ReconciliationDiffTypeEnum {
  AMOUNT_DIFF = 1, // 金额不符
  STATUS_DIFF = 2, // 状态不符
  EXTRA_RECORD = 3, // 多账
  MISSING_RECORD = 4 // 少账
}

/**
 * 差异处理状态枚举
 */
export enum DiffHandleStatusEnum {
  PENDING = 0, // 待处理
  HANDLED = 1, // 已处理
  IGNORED = 2 // 已忽略
}

/**
 * 提现状态枚举
 */
export enum WithdrawStatusEnum {
  PENDING_AUDIT = 0, // 待审核
  AUDIT_PASSED = 1, // 审核通过
  AUDIT_REJECTED = 2, // 审核拒绝
  WITHDRAWING = 3, // 提现中
  WITHDRAW_SUCCESS = 4, // 提现成功
  WITHDRAW_FAILED = 5 // 提现失败
}

/**
 * 审核状态枚举
 */
export enum AuditStatusEnum {
  PASS = 1, // 审核通过
  REJECT = 2 // 审核拒绝
}

/**
 * 余额类型枚举
 */
export enum BalanceTypeEnum {
  AVAILABLE = 1, // 可用余额
  FROZEN = 2, // 冻结余额
  TOTAL = 3 // 总余额
}

/**
 * 退款状态枚举
 */
export enum RefundStatusEnum {
  PENDING = 0, // 退款中
  SUCCESS = 1, // 退款成功
  FAILED = 2 // 退款失败
}

/**
 * 差异类型枚举
 */
export enum DiffTypeEnum {
  AMOUNT_DIFF = 1, // 金额差异
  STATUS_DIFF = 2, // 状态差异
  MISSING_ORDER = 3, // 缺失订单
  EXTRA_ORDER = 4 // 多余订单
}

/**
 * 处理状态枚举
 */
export enum HandleStatusEnum {
  PENDING = 0, // 待处理
  HANDLED = 1, // 已处理
  IGNORED = 2 // 已忽略
}

/**
 * 结算单状态枚举
 */
export enum SettleOrderStatusEnum {
  PENDING = 0, // 待结算
  PROCESSING = 1, // 结算中
  SUCCESS = 2, // 结算成功
  FAILED = 3, // 结算失败
  CANCELLED = 4 // 已取消
}

/**
 * 分账规则状态枚举
 */
export enum SplitRuleStatusEnum {
  ENABLED = 1, // 启用
  DISABLED = 0 // 禁用
}

/**
 * 接收方类型枚举
 */
export enum ReceiverTypeEnum {
  MERCHANT = 1, // 商户
  PERSONAL = 2 // 个人
}

/**
 * 子商户状态枚举
 */
export enum SubMerchantStatusEnum {
  PENDING = 0, // 待审核
  APPROVED = 1, // 审核通过
  REJECTED = 2, // 审核拒绝
  FROZEN = 3 // 已冻结
}

/**
 * 经营类型枚举
 */
export enum BusinessTypeEnum {
  ENTERPRISE = 1, // 企业
  INDIVIDUAL = 2, // 个体
  MICRO = 3 // 小微
}

/**
 * 优先级枚举
 */
export enum PriorityEnum {
  LOW = 1, // 低
  NORMAL = 2, // 普通
  HIGH = 3, // 高
  URGENT = 4 // 紧急
}
